﻿// Stripies POJ - 1862.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cstring>
#include <stdio.h>
#include <cmath>

using namespace std;
//https://vjudge.csgrandeur.cn/problem/POJ-1862
/*
我们的化学生物学家发明了一种新的非常有用的生命形式--"条虫"
（事实上，它们最初的俄文名称是 polosatiki，但科学家们不得不发明一个英文名称来申请国际专利）。
条纹生物是一种透明的无定形阿米巴状生物，它们以扁平的群落形式生活在果冻状的营养介质中。
大多数时候，条带都在移动。当两只条纹虫相撞时，就会出现新的条纹虫代替它们。
我们的科学家经过长期观察，发现新条带的重量并不等同于碰撞后消失的两个条带的重量之和；
不过，他们很快就知道，当两个重量分别为 m1 和 m2 的条带碰撞时，产生的条带的重量等于 2*sqrt(m1*m2)。
我们的化学生物学家非常想知道，在多大程度上可以减少特定条带群体的总重量。
您需要编写一个程序来帮助他们回答这个问题。您可以假定 3 个或更多的条纹纸永远不会碰撞在一起。
输入
输入的第一行包含一个整数 N（1 <= N <= 100）--一个带鱼群中带鱼的数量。
接下来的 N 行中的每一行都包含一个从 1 到 10000 的整数 - 相应条带的重量。
输出
输出必须包含一行尽可能小的菌落总重量，精确到小数点后三位。

3
72
30
50

120.000

*/

int n;

int main()
{
	priority_queue<double, vector<double> > q;
	cin >> n;
	for (int i = 0; i < n; i++) {
		int t; cin >> t;
		q.push(t);
	}
 
	while (!q.empty()) {
		if (q.size() == 1) {
			printf("%.3f\n", q.top()); return 0;
		}
		double a = q.top(); q.pop();
		double b = q.top(); q.pop();
		double c = sqrt(a * b) * 2.0;
		q.push(c);
	}

	return 0;
}

